package com.six.backend.dao;

import com.six.backend.pojo.*;
import io.swagger.models.auth.In;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @Author: skyler
 * @Date: 2021/11/4 15:31
 */
@Mapper
public interface ConferenceDao {
    /**
     * 修改会议信息
     * @param conference 要修改的会议信息
     * @return int
     */
    int alterConference(Conference conference);


    /**
     * 通过会议名称，开始时间，结束时间进行模糊查询会议(获取与该用户有关的会议）
     * @param map {会议名称 name，开始时间 startTime，结束时间 endTime} 实现会议名称的模糊查询
     * @return List
     */
    List<Conference> getConference(Map map);

    /**
     * 删除会议
     * @param map {id 会议编号}
     * @return Integer
     */
    Integer deleteConference(Map map);

    /**
     * 插入会议
     * @param conference
     * @return
     */
    Integer insertConference(Conference conference);

    /**
     * 插入参会人员
     * @param conferenceId 会议编号
     * @param users 参会人员列表
     * @return
     */
    Integer insertParticipants(@Param("conferenceId") Integer conferenceId,
                               @Param("userList") List<User> users);

    /**
     * 查询会议的信息
     * @param id 会议的id
     * @return 会议的全部信息
     */
    Conference getConferenceInformation(Integer id);

    /**
     * 获取会议的参会人员
     * @param conferenceId
     * @return
     */
    List<User> getConferenceParticipants(Integer conferenceId);

    /**
     * 通过account查询参会人员的name
     * @param conferenceParticipantsId 参会人员id的数组
     * @return 参会人员name的数组
     */
    List<User> selectNameByListId(List<String> conferenceParticipantsId);

    /**
     * 查询会议的主题
     * @param id 会议的id
     * @return 会议主题的信息
     */
    Theme selectTheme(Integer id);

    /**
     * 查询主题所包含的议题
     * @param id 主题的id
     * @return 议题的数组
     */
    List<Agenda> selectAgenda(Integer id);

    /**
     * 查询会议的素材信息
     * @param id 会议的id
     * @return 会议素材的集合
     */
    List<SourceMaterial> selectConferenceSourceById(Integer id);

    /**
     * 模糊查询会议素材信息
     * @param id 会议的id
     * @param name 素材的名称
     * @return 查询到的素材的集合
     */
    List<SourceMaterial> selectConferenceSourceByName(Integer id, String name);

    /**
     * 开始会议
     * @param conferenceId
     * @return
     */
    Integer startConference(Integer conferenceId);

    /**
     * 结束会议
     * @param conferenceId
     * @return
     */
    Integer endConference(Integer conferenceId);

    /**
     * 统计正在进行的议题
     * @param conferenceId
     * @return
     */
    List<Agenda> selectRunningAgenda(Integer conferenceId);

    /**
     * 判断该用户是否是会议主持人
     * @param conferenceId
     * @param account
     * @return
     */
    Conference isConferenceHost(Integer conferenceId,String account);

    /**
     *保存会议聊天记录
     * @param fromAccount 发送消息的账户
     * @param roomName 会议名称
     * @param message 发送的消息
     * @param date 发送消息的时间
     */
    void saveMessage(String roomName, String fromAccount, String message, Date date);

    /**
     * 查询当前会议状态
     * @param conferenceId
     * @return
     */
    Integer selectStatus(Integer conferenceId);
}
